在前兩天,我們已經學會了 Node.js 基本環境建置 與 NPM 套件安裝。接下來,讓我們來點更實際的應用:如何用 Node.js 直接取得股票資料。
許多人一開始想抓取股市資訊,可能會直覺使用「爬蟲」去爬網頁,但其實現在有許多免費的 API,可以讓我們更乾淨、快速地拿到資料,不需要擔心網站改版或是被封鎖。
今天我們就要用 API 的方式,帶大家寫一個小範例,來抓取股市即時或歷史資料。
資料結構穩定:API 通常以 JSON 格式回傳,資料格式清楚。
不用解析 HTML:免去複雜的 DOM selector 或 HTML 標籤。
合法性較高:爬蟲有時會觸碰網站使用規範,而官方 API 或第三方 API 是公開提供。
速度更快:回傳資料精簡,減少不必要的流量。
這裡舉兩個常見的 API 來源,讀者可以依需求選用:
Alpha Vantage
免費提供股票、外匯、加密貨幣的歷史與即時資料,每分鐘有 5 次免費請求。
👉 官方網站
Yahoo Finance (非官方 API)
透過社群整理的 API,可以抓取股價、公司資訊。
本篇教學我們先以 Yahoo Finance (非官方 API) 為例,示範如何在 Node.js 中使用。
輸入 Email,免費申請一組 API Key。
稍後會收到一組字串,例如:
這就是我們等下要用的金鑰。
先假設為:
nginx
demo1234567890
我們要用 axios 來發送 HTTP 請求。
bash
npm install axios
新建一個檔案 stock.js,並輸入以下程式碼:
js
const axios = require('axios');
// 把你的 API Key 放這裡
const API_KEY = 'demo1234567890';
const SYMBOL = 'TSLA'; // 這裡我們抓 Tesla 的股價
async function getStockData() {
try {
const url = `https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=${SYMBOL}&interval=5min&apikey=${API_KEY}`;
const response = await axios.get(url);
const data = response.data;
// 印出最新一筆股價
const timeSeries = data['Time Series (5min)'];
const latestTime = Object.keys(timeSeries)[0];
const latestData = timeSeries[latestTime];
console.log(`股票:${SYMBOL}`);
console.log(`時間:${latestTime}`);
console.log(`開盤價:${latestData['1. open']}`);
console.log(`收盤價:${latestData['4. close']}`);
console.log(`成交量:${latestData['5. volume']}`);
} catch (error) {
console.error('抓取失敗:', error.message);
}
}
getStockData();
bash
node stock.js
如果成功,你會看到類似這樣的輸出:
但我的繁體中文目前顯示都還是亂碼😭
這部分我也還在嘗試解決,但不影響輸出
換股票代號:把 SYMBOL = 'TSLA' 改成 AAPL (Apple)、GOOGL (Google) 就能抓不同公司。
換查詢模式:Alpha Vantage 支援 TIME_SERIES_DAILY、TIME_SERIES_WEEKLY 等不同區間。
整合前端:把資料丟到前端頁面,用圖表(例如 Chart.js 或 Recharts)視覺化。
今天我們學會了:
什麼是 API,為什麼比爬蟲更適合抓股票資料。
如何申請 Alpha Vantage 的 API Key。
用 Node.js + axios 抓取即時股價。
到這裡,已經能夠建立一個最簡單的「股票查詢工具」! 🚀
👉 明天(Day 4),我們將來探討各個股票,甚至是加密貨幣的一個必較,來看看對於窮大學生的我來說,哪個最容易上手!